﻿using SIIE_ERP.Codigo;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.OleDb;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SIIE_ERP.BaseDatos
{
    public static class Documentos_Lineas
    {
        #region INSERT

        /// <summary>
        /// Insert para las Líneas de Cotización de Compra, Cotización de Ventas, 
        /// Factura de Clientes, Factura de Proveedores, Ordenes de Compra, Pedidos, 
        /// Recepciones, Remisiones, Devoluciones de Compras y Devoluciones de Ventas
        /// </summary>
        /// <param name="RFC"></param>
        /// <param name="Usuario"></param>
        /// <param name="Id_Documento_Padre"></param>
        /// <param name="Tipo_Documento_Padre"></param>
        /// <param name="Id_Articulo"></param>
        /// <param name="Cantidad"></param>
        /// <param name="Precio_Unitario"></param>
        /// <param name="Porc_Descuento"></param>
        /// <param name="Descuento"></param>
        /// <param name="Porc_Impuesto"></param>
        /// <param name="Impuesto"></param>
        /// <param name="Precio_SubTotal"></param>
        /// <param name="Precio_Total"></param>
        /// <param name="Comentarios"></param>
        /// <param name="Cantidad_Pendiente"></param>
        /// <returns></returns>
        public static Respuesta Insert_Linea(

            string RFC,
            string Usuario,

            int Id_Documento_Padre,
            Documentos_Id Tipo_Documento_Padre,

            int Id_Articulo,
            
            double Cantidad,
            double Precio_Unitario,
            double Porc_Descuento,
            double Descuento,

            double Porc_Impuesto,
            double Impuesto,

            double Precio_SubTotal,
            double Precio_Total,

            string Comentarios
        )
        {
            try
            {
                string Tabla = "";
                string Id_Padre = "";
                string Tabla_Padre = "";

                if (Tipo_Documento_Padre == Documentos_Id.Doc_CotizacionCompra)
                {
                    Tabla = "dbo_Trans_Cotizacion_Compra_Linea";
                    Tabla_Padre = "dbo_Trans_Cotizacion_Compra_Cab";
                    Id_Padre = "Id_Cotizacion_Compra";
                }
                else if (Tipo_Documento_Padre == Documentos_Id.Doc_CotizacionVenta)
                {
                    Tabla = "dbo_Trans_Cotizacion_Venta_Linea";
                    Tabla_Padre = "dbo_Trans_Cotizacion_Venta_Cab";
                    Id_Padre = "Id_Cotizacion_Venta";
                }
                else if (Tipo_Documento_Padre == Documentos_Id.Doc_FacturaCliente)
                {
                    Tabla = "dbo_Trans_Factura_Cliente_Linea";
                    Tabla_Padre = "dbo_Trans_Factura_Cliente_Cab";
                    Id_Padre = "Id_Factura_Cliente";
                }
                else if (Tipo_Documento_Padre == Documentos_Id.Doc_FacturaProveedor)
                {
                    Tabla = "dbo_Trans_Factura_Proveedor_Linea";
                    Tabla_Padre = "dbo_Trans_Factura_Proveedor_Cab";
                    Id_Padre = "Id_Factura_Proveedor";
                }
                else if (Tipo_Documento_Padre == Documentos_Id.Doc_OrdenCompra)
                {
                    Tabla = "dbo_Trans_OrdenCompra_Linea";
                    Tabla_Padre = "dbo_Trans_OrdenCompra_Cab";
                    Id_Padre = "Id_OrdenCompra";
                }
                else if (Tipo_Documento_Padre == Documentos_Id.Doc_Pedido)
                {
                    Tabla = "dbo_Trans_Pedido_Linea";
                    Tabla_Padre = "dbo_Trans_Pedido_Cab";
                    Id_Padre = "Id_Pedido";
                }
                else if (Tipo_Documento_Padre == Documentos_Id.Doc_Recepcion)
                {
                    Tabla = "dbo_Trans_Recepcion_Linea";
                    Tabla_Padre = "dbo_Trans_Recepcion_Cab";
                    Id_Padre = "Id_Recepcion";
                }
                else if (Tipo_Documento_Padre == Documentos_Id.Doc_Remision)
                {
                    Tabla = "dbo_Trans_Remision_Linea";
                    Tabla_Padre = "dbo_Trans_Remision_Cab";
                    Id_Padre = "Id_Remision";
                }
                else if (Tipo_Documento_Padre == Documentos_Id.Doc_DevolucionCliente)
                {
                    Tabla = "dbo_Trans_Devolucion_Cliente_Linea";
                    Tabla_Padre = "dbo_Trans_Devolucion_Cliente_Cab";
                    Id_Padre = "Id_Devolucion_Cliente";
                }
                else if (Tipo_Documento_Padre == Documentos_Id.Doc_DevolucionProveedor)
                {
                    Tabla = "dbo_Trans_Devolucion_Proveedor_Linea";
                    Tabla_Padre = "dbo_Trans_Devolucion_Proveedor_Cab";
                    Id_Padre = "Id_Devolucion_Proveedor";
                }

                else if (Tipo_Documento_Padre == Documentos_Id.Doc_NotaCreditoCliente)
                {
                    Tabla = "dbo_Trans_Nota_Credito_Cliente_Linea";
                    Tabla_Padre = "dbo_Trans_Nota_Credito_Cliente_Cab";
                    Id_Padre = "Id_Nota_Credito_Cliente";
                }
                else if (Tipo_Documento_Padre == Documentos_Id.Doc_NotaCreditoProveedor)
                {
                    Tabla = "dbo_Trans_Nota_Credito_Proveedor_Linea";
                    Tabla_Padre = "dbo_Trans_Nota_Credito_Proveedor_Cab";
                    Id_Padre = "Id_Nota_Credito_Proveedor";
                }

                if (String.IsNullOrEmpty(Comentarios))
                    Comentarios = " ";

                string Query = @"

                INSERT INTO @@Tabla
                (                    
	                Id_Linea,
	                RFC,
	                Id_Padre,
	                Secuencia,
	                Id_Articulo,
	                Cantidad,
	                Precio_Unitario,
	                Porc_Descuento,
	                Descuento,
	                Precio_SubTotal,
	                Porc_Impuesto,
	                Impuesto,
	                Precio_Total,
	                Cantidad_Pendiente,
	                Comentarios,
	                Fecha_Alta,
	                Usuario_Alta,
	                Fecha_Mantto,
	                Usuario_Mantto
                )
                VALUES
                (
                    IIF(DCount('*', '@@Tabla') = 0, 1, DMax('Id_Linea', '@@Tabla') + 1),
                    '@RFC',
                    @@Id_Padre,
                    IIF(DCount('*', '@@Tabla', ""Id_Padre = @@Id_Padre"") = 0, 1, DMax('Id_Linea', '@@Tabla', ""Id_Padre = @@Id_Padre"") + 1),
                    @Id_Articulo,
	                @Cantidad_Real,
	                @Precio_Unitario,
	                @Porc_Descuento,
	                @Descuento,
	                @Precio_SubTotal,
	                @Porc_Impuesto,
	                @Impuesto,
	                @Precio_Total,
	                0,
	                '@Comentarios',
                    NOW(),
                    '@Usuario_Alta',
                    NOW(),
                    '@Usuario_Mantto'
                )".Replace("@@Tabla", Tabla).Replace("@@Id_Padre", Id_Documento_Padre.ToString());

                Query = Query.Replace("@RFC", RFC);
                Query = Query.Replace("@Id_Articulo", Id_Articulo.ToString());                
                Query = Query.Replace("@Precio_Unitario", Precio_Unitario.ToString());
                Query = Query.Replace("@Porc_Descuento", Porc_Descuento.ToString());
                Query = Query.Replace("@Descuento", Descuento.ToString());
                Query = Query.Replace("@Precio_SubTotal", Precio_SubTotal.ToString());
                Query = Query.Replace("@Porc_Impuesto", Porc_Impuesto.ToString());
                Query = Query.Replace("@Impuesto", Impuesto.ToString());
                Query = Query.Replace("@Precio_Total", Precio_Total.ToString());
                Query = Query.Replace("@Cantidad_Real", Cantidad.ToString());
                Query = Query.Replace("@Comentarios", Comentarios.ToString());
                Query = Query.Replace("@Usuario_Alta", Usuario);
                Query = Query.Replace("@Usuario_Mantto", Usuario);

                SrvDB.ExecuteQuery_Insert(Query);

                string Query2 = @"

                UPDATE @@Tabla 
                     SET 
                        Saldo = DMax('Saldo', '@@Tabla', ""@@Id_Padre = @@Id"") + @@Saldo,                        
                        Total = DMax('Total', '@@Tabla', ""@@Id_Padre = @@Id"") + @@Total,
                        Impuesto = DMax('Impuesto', '@@Tabla', ""@@Id_Padre = @@Id"") + @@Impuesto,
                        Descuento = DMax('Descuento', '@@Tabla', ""@@Id_Padre = @@Id"") + @@Descuento,
                        Subtotal = DMax('Subtotal', '@@Tabla', ""@@Id_Padre = @@Id"") + @@Subtotal,
                        Partidas = DMax('Partidas', '@@Tabla', ""@@Id_Padre = @@Id"") + 1
                     WHERE @@Id_Padre = @@Id
                ";

                Query2 = Query2.Replace("@@Tabla", Tabla_Padre);
                Query2 = Query2.Replace("@@Id_Padre", Id_Padre.ToString());  
                
                Query2 = Query2.Replace("@@Descuento", Descuento.ToString());                
                Query2 = Query2.Replace("@@Subtotal", Precio_SubTotal.ToString());                
                Query2 = Query2.Replace("@@Impuesto", Impuesto.ToString());
                Query2 = Query2.Replace("@@Total", Precio_Total.ToString());
                Query2 = Query2.Replace("@@Saldo", Precio_Total.ToString());
                
                Query2 = Query2.Replace("@@Id", Id_Documento_Padre.ToString());

                return SrvDB.ExecuteQuery_Update(Query2);
            }
            catch (Exception Ex)
            {
                return new Respuesta(2, Ex.Message);
            }
        }

        /// <summary>
        /// Insert para las Líneas de Recibo de Honorarios y Recibo de Arrendamiento 
        /// </summary>
        /// <param name="RFC"></param>
        /// <param name="Usuario"></param>
        /// <param name="Id_Documento_Padre"></param>
        /// <param name="Tipo_Documento_Padre"></param>
        /// <param name="Id_Articulo"></param>
        /// <param name="Cantidad"></param>
        /// <param name="Precio_Unitario"></param>
        /// <param name="Precio_SubTotal"></param>
        /// <param name="Porc_IVA"></param>
        /// <param name="IVA"></param>
        /// <param name="Porc_IVARet"></param>
        /// <param name="IVARet"></param>
        /// <param name="Porc_ISRRet"></param>
        /// <param name="ISRRet"></param>
        /// <param name="Precio_Total"></param>
        /// <param name="Comentarios"></param>
        /// <param name="Cantidad_Pendiente"></param>
        /// <returns></returns>
        public static Respuesta Insert_Linea_HonorariosArrendamiento(

            string RFC,
            string Usuario,

            int Id_Documento_Padre,
            Documentos_Id Tipo_Documento_Padre,

            int Id_Articulo,

            double Cantidad,
            double Precio_Unitario,
            double Precio_SubTotal,

            double Porc_IVA,
            double IVA,

            double Porc_IVARet,
            double IVARet,

            double Porc_ISRRet,
            double ISRRet,

            double Precio_Total,

            string Comentarios

        )
        {
            try
            {
                string Tabla = "";
                string Id_Padre = "";
                string Tabla_Padre = "";

                if (Tipo_Documento_Padre == Documentos_Id.Doc_ReciboHonorariosVentas)
                {
                    Tabla = "dbo_Trans_ReciboHonorarios_Cliente_Linea";
                    Tabla_Padre = "dbo_Trans_ReciboHonorarios_Cliente_Cab";
                    Id_Padre = "Id_ReciboHonorarios_Cliente";
                }
                else if (Tipo_Documento_Padre == Documentos_Id.Doc_ReciboArrendamientoVentas)
                {
                    Tabla = "dbo_Trans_ReciboArrendamiento_Cliente_Linea";
                    Tabla_Padre = "dbo_Trans_ReciboArrendamiento_Cliente_Cab";
                    Id_Padre = "Id_ReciboArrendamiento_Cliente";
                }

                string Query = @"

                INSERT INTO @@Tabla
                (   
	                Id_Linea,
	                RFC,
	                Id_Padre,
	                Secuencia,
	                Id_Articulo,
	                Cantidad,
	                Precio_Unitario,
	                Precio_SubTotal,
	                Porc_IVA,
	                IVA,
	                Porc_IVARet,
	                IVARet,
	                Porc_ISRRet,
	                ISRRet,
	                Precio_Total,
	                Cantidad_Pendiente,
	                Comentarios,
	                Fecha_Alta,
	                Usuario_Alta,
	                Fecha_Mantto,
	                Usuario_Mantto
                )
                VALUES
                (
                    IIF(DCount('*', '@@Tabla') = 0, 1, DMax('Id_Linea', '@@Tabla') + 1),
                    '@RFC',
                    @@Id_Padre,
                    IIF(DCount('*', '@@Tabla', ""Id_Padre = @@Id_Padre"") = 0, 1, DMax('Id_Linea', '@@Tabla', ""Id_Padre = @@Id_Padre"") + 1),
                    @Id_Articulo,
	                @Cantidad,
	                @Precio_Unitario,
	                @Precio_SubTotal,
                    @Porc_IVA,
                    @IVA,
                    @Porc_IVARet,
                    @IVARet,
                    @Porc_ISRRet,
                    @ISRRet,
                    @Precio_Total,
	                0,
	                '@Comentarios ',
                    NOW(),
                    '@Usuario_Alta',
                    NOW(),
                    '@Usuario_Mantto'
                )".Replace("@@Tabla", Tabla).Replace("@@Id_Padre", Id_Documento_Padre.ToString());

                Query = Query.Replace("@RFC", RFC);
                Query = Query.Replace("@Id_Articulo", Id_Articulo.ToString());
                Query = Query.Replace("@Cantidad", Cantidad.ToString());
                Query = Query.Replace("@Precio_Unitario", Precio_Unitario.ToString());
                Query = Query.Replace("@Precio_SubTotal", Precio_SubTotal.ToString());                
                Query = Query.Replace("@Porc_IVARet", Porc_IVARet.ToString());
                Query = Query.Replace("@Porc_ISRRet", Porc_ISRRet.ToString());
                Query = Query.Replace("@Porc_IVA", Porc_IVA.ToString());                
                Query = Query.Replace("@IVARet", IVARet.ToString());                
                Query = Query.Replace("@ISRRet", ISRRet.ToString());
                Query = Query.Replace("@IVA", IVA.ToString());                
                Query = Query.Replace("@Precio_Total", Precio_Total.ToString());
                Query = Query.Replace("@Comentarios", Comentarios.ToString());
                Query = Query.Replace("@Usuario_Alta", Usuario);
                Query = Query.Replace("@Usuario_Mantto", Usuario);

                SrvDB.ExecuteQuery_Insert(Query);

                string Query2 = @"

                UPDATE @@Tabla 
                     SET 
                        Saldo = DMax('Saldo', '@@Tabla', ""@@Id_Padre = @@Id"") + @@Saldo,                        
                        Total = DMax('Total', '@@Tabla', ""@@Id_Padre = @@Id"") + @@Total,
                        Impuesto = DMax('Impuesto', '@@Tabla', ""@@Id_Padre = @@Id"") + @@Impuesto,                        
                        Subtotal = DMax('Subtotal', '@@Tabla', ""@@Id_Padre = @@Id"") + @@Subtotal,
                        Partidas = DMax('Partidas', '@@Tabla', ""@@Id_Padre = @@Id"") + 1
                     WHERE @@Id_Padre = @@Id
                ";

                Query2 = Query2.Replace("@@Tabla", Tabla_Padre);
                Query2 = Query2.Replace("@@Id_Padre", Id_Padre.ToString());                
                Query2 = Query2.Replace("@@Subtotal", Precio_SubTotal.ToString());
                Query2 = Query2.Replace("@@Impuesto", IVA.ToString());
                Query2 = Query2.Replace("@@Total", Precio_Total.ToString());
                Query2 = Query2.Replace("@@Saldo", Precio_Total.ToString());

                Query2 = Query2.Replace("@@Id", Id_Documento_Padre.ToString());

                return SrvDB.ExecuteQuery_Update(Query2);
            }
            catch (Exception Ex)
            {
                return new Respuesta(2, Ex.Message);
            }
        }

        #endregion

        #region DELETE

        public static Respuesta Delete_Linea(
                        
            int Id_Linea,
            int Id_Documento_Padre,
            Documentos_Id Tipo_Documento_Padre
        
        ) {

            try
            {
                string Tabla = "";
                string Id_Padre = "";
                string Tabla_Padre = "";

                if (Tipo_Documento_Padre == Documentos_Id.Doc_CotizacionCompra)
                {
                    Tabla = "dbo_Trans_Cotizacion_Compra_Linea";
                    Tabla_Padre = "dbo_Trans_Cotizacion_Compra_Cab";
                    Id_Padre = "Id_Cotizacion_Compra";
                }
                else if (Tipo_Documento_Padre == Documentos_Id.Doc_CotizacionVenta)
                {
                    Tabla = "dbo_Trans_Cotizacion_Venta_Linea";
                    Tabla_Padre = "dbo_Trans_Cotizacion_Venta_Cab";
                    Id_Padre = "Id_Cotizacion_Venta";
                }
                else if (Tipo_Documento_Padre == Documentos_Id.Doc_FacturaCliente)
                {
                    Tabla = "dbo_Trans_Factura_Cliente_Linea";
                    Tabla_Padre = "dbo_Trans_Factura_Cliente_Cab";
                    Id_Padre = "Id_Factura_Cliente";
                }
                else if (Tipo_Documento_Padre == Documentos_Id.Doc_FacturaProveedor)
                {
                    Tabla = "dbo_Trans_Factura_Proveedor_Linea";
                    Tabla_Padre = "dbo_Trans_Factura_Proveedor_Cab";
                    Id_Padre = "Id_Factura_Proveedor";
                }
                else if (Tipo_Documento_Padre == Documentos_Id.Doc_OrdenCompra)
                {
                    Tabla = "dbo_Trans_OrdenCompra_Linea";
                    Tabla_Padre = "dbo_Trans_OrdenCompra_Cab";
                    Id_Padre = "Id_OrdenCompra";
                }
                else if (Tipo_Documento_Padre == Documentos_Id.Doc_Pedido)
                {
                    Tabla = "dbo_Trans_Pedido_Linea";
                    Tabla_Padre = "dbo_Trans_Pedido_Cab";
                    Id_Padre = "Id_Pedido";
                }
                else if (Tipo_Documento_Padre == Documentos_Id.Doc_Recepcion)
                {
                    Tabla = "dbo_Trans_Recepcion_Linea";
                    Tabla_Padre = "dbo_Trans_Recepcion_Cab";
                    Id_Padre = "Id_Recepcion";
                }
                else if (Tipo_Documento_Padre == Documentos_Id.Doc_Remision)
                {
                    Tabla = "dbo_Trans_Remision_Linea";
                    Tabla_Padre = "dbo_Trans_Remision_Cab";
                    Id_Padre = "Id_Remision";
                }
                else if (Tipo_Documento_Padre == Documentos_Id.Doc_DevolucionCliente)
                {
                    Tabla = "dbo_Trans_Devolucion_Cliente_Linea";
                    Tabla_Padre = "dbo_Trans_Devolucion_Cliente_Cab";
                    Id_Padre = "Id_Devolucion_Cliente";
                }
                else if (Tipo_Documento_Padre == Documentos_Id.Doc_DevolucionProveedor)
                {
                    Tabla = "dbo_Trans_Devolucion_Proveedor_Linea";
                    Tabla_Padre = "dbo_Trans_Devolucion_Proveedor_Cab";
                    Id_Padre = "Id_Devolucion_Proveedor";
                }
                
                string Query = @"

                UPDATE @@Tabla_Padre 
                     SET 
                        Saldo = DMax('Saldo', '@@Tabla_Padre', ""@@Id_Padre_Desc = @@Id_Padre"") - DMax('Precio_Total', '@@Tabla_Hijo', ""Id_Linea = @@Id_Hijo""),    
                        Total = DMax('Total', '@@Tabla_Padre', ""@@Id_Padre_Desc = @@Id_Padre"") - DMax('Precio_Total', '@@Tabla_Hijo', ""Id_Linea = @@Id_Hijo""),
                        Impuesto = DMax('Impuesto', '@@Tabla_Padre', ""@@Id_Padre_Desc = @@Id_Padre"") - DMax('Impuesto', '@@Tabla_Hijo', ""Id_Linea = @@Id_Hijo""),
                        Descuento = DMax('Descuento', '@@Tabla_Padre', ""@@Id_Padre_Desc = @@Id_Padre"") - DMax('Descuento', '@@Tabla_Hijo', ""Id_Linea = @@Id_Hijo""),
                        Subtotal = DMax('Subtotal', '@@Tabla_Padre', ""@@Id_Padre_Desc = @@Id_Padre"") - DMax('Precio_SubTotal', '@@Tabla_Hijo', ""Id_Linea = @@Id_Hijo""),
                        Partidas = DMax('Partidas', '@@Tabla_Padre', ""@@Id_Padre_Desc = @@Id_Padre"") - 1
                     WHERE @@Id_Padre_Desc = @@Id_Padre
                ";
                
                Query = Query.Replace("@@Tabla_Padre", Tabla_Padre);

                Query = Query.Replace("@@Id_Padre_Desc", Id_Padre);                
                Query = Query.Replace("@@Id_Padre", Id_Documento_Padre.ToString());
                
                Query = Query.Replace("@@Tabla_Hijo", Tabla);
                Query = Query.Replace("@@Id_Hijo", Id_Linea.ToString());

                SrvDB.ExecuteQuery_Update(Query);

                string Query2 = @"

                DELETE FROM @@Tabla_Hijo WHERE Id_Linea = @@Id_Hijo
                ";

                Query2 = Query2.Replace("@@Tabla_Hijo", Tabla);
                Query2 = Query2.Replace("@@Id_Hijo", Id_Linea.ToString());

                return SrvDB.ExecuteQuery_Delete(Query2);
            }
            catch (Exception Ex)
            {
                return new Respuesta(2, Ex.Message);
            }
        }

        public static Respuesta Delete_Linea_HonorariosArrendamiento(

            int Id_Linea,
            int Id_Documento_Padre,
            Documentos_Id Tipo_Documento_Padre
        )
        {

            try
            {
                string Tabla = "";
                string Id_Padre = "";
                string Tabla_Padre = "";
                                
                if (Tipo_Documento_Padre == Documentos_Id.Doc_ReciboHonorariosVentas)
                {
                    Tabla = "dbo_Trans_ReciboHonorarios_Cliente_Linea";
                    Tabla_Padre = "dbo_Trans_ReciboHonorarios_Cliente_Cab";
                    Id_Padre = "Id_ReciboHonorarios_Cliente";
                }
                else if (Tipo_Documento_Padre == Documentos_Id.Doc_ReciboArrendamientoVentas)
                {
                    Tabla = "dbo_Trans_ReciboArrendamiento_Cliente_Linea";
                    Tabla_Padre = "dbo_Trans_ReciboArrendamiento_Cliente_Cab";
                    Id_Padre = "Id_ReciboArrendamiento_Cliente";
                }

                string Query = @"

                UPDATE @@Tabla_Padre 
                     SET 
                        Saldo = DMax('Saldo', '@@Tabla_Padre', ""@@Id_Padre_Desc = @@Id_Padre"") - DMax('Precio_Total', '@@Tabla_Hijo', ""Id_Linea = @@Id_Hijo""),    
                        Total = DMax('Total', '@@Tabla_Padre', ""@@Id_Padre_Desc = @@Id_Padre"") - DMax('Precio_Total', '@@Tabla_Hijo', ""Id_Linea = @@Id_Hijo""),
                        Impuesto = DMax('Impuesto', '@@Tabla_Padre', ""@@Id_Padre_Desc = @@Id_Padre"") - DMax('IVA', '@@Tabla_Hijo', ""Id_Linea = @@Id_Hijo""),
                        Subtotal = DMax('Subtotal', '@@Tabla_Padre', ""@@Id_Padre_Desc = @@Id_Padre"") - DMax('Precio_SubTotal', '@@Tabla_Hijo', ""Id_Linea = @@Id_Hijo""),
                        Partidas = DMax('Partidas', '@@Tabla_Padre', ""@@Id_Padre_Desc = @@Id_Padre"") - 1
                     WHERE @@Id_Padre_Desc = @@Id_Padre
                ";

                Query = Query.Replace("@@Tabla_Padre", Tabla_Padre);

                Query = Query.Replace("@@Id_Padre_Desc", Id_Padre);
                Query = Query.Replace("@@Id_Padre", Id_Documento_Padre.ToString());

                Query = Query.Replace("@@Tabla_Hijo", Tabla);
                Query = Query.Replace("@@Id_Hijo", Id_Linea.ToString());

                SrvDB.ExecuteQuery_Update(Query);

                string Query2 = @"

                DELETE FROM @@Tabla_Hijo WHERE Id_Linea = @@Id_Hijo
                ";

                Query2 = Query2.Replace("@@Tabla_Hijo", Tabla);
                Query2 = Query2.Replace("@@Id_Hijo", Id_Linea.ToString());

                return SrvDB.ExecuteQuery_Delete(Query2);
            }
            catch (Exception Ex)
            {
                return new Respuesta(2, Ex.Message);
            }
        }            

        #endregion

        #region SELECT

        public static DataTable Get_LineasArrendamiento(

            int Id_Documento_Padre,
            Documentos_Id Tipo_Documento_Padre
        )
        {
            string Tabla = "";
            
            if (Tipo_Documento_Padre == Documentos_Id.Doc_ReciboArrendamientoVentas)
            {
                Tabla = "dbo_Trans_ReciboArrendamiento_Cliente_Linea";
            }

            string Query = @"
                SELECT A1.*,
                       A2.Nombre AS Desc_Articulo

                FROM 
                    (@@Tabla AS A1 
                        LEFT JOIN dbo_Cat_Inmueble  AS A2 ON A1.Id_Articulo = A2.Id_Inmueble)                        

                WHERE Id_Padre = @@Id ORDER BY Secuencia
            ";

            Query = Query.Replace("@@Tabla", Tabla);
            Query = Query.Replace("@@Id", Id_Documento_Padre.ToString());

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public static DataTable Get_Lineas(

            int Id_Documento_Padre,
            Documentos_Id Tipo_Documento_Padre
        )
        {
            string Tabla = "";

            string Query = @"
                SELECT A1.*,
                       A2.Nombre AS Desc_Articulo,
                       A2.Tipo_Articulo AS Tipo_Articulo,
                       A3.Nombre AS Desc_UM

                FROM 
                    ((@@Tabla AS A1 
                        LEFT JOIN dbo_Cat_Articulo  AS A2 ON A1.Id_Articulo = A2.Id_Articulo)
                        LEFT JOIN dbo_Cat_UM  AS A3 ON A2.Id_UM = A3.Id_UM)

                WHERE Id_Padre = @@Id ORDER BY Secuencia
            ";

            if (Tipo_Documento_Padre == Documentos_Id.Doc_CotizacionCompra)
            {
                Tabla = "dbo_Trans_Cotizacion_Compra_Linea";
            }
            else if (Tipo_Documento_Padre == Documentos_Id.Doc_CotizacionVenta)
            {
                Tabla = "dbo_Trans_Cotizacion_Venta_Linea";
            }
            else if (Tipo_Documento_Padre == Documentos_Id.Doc_FacturaCliente)
            {
                Tabla = "dbo_Trans_Factura_Cliente_Linea";
            }
            else if (Tipo_Documento_Padre == Documentos_Id.Doc_FacturaProveedor)
            {
                Tabla = "dbo_Trans_Factura_Proveedor_Linea";
            }
            else if (Tipo_Documento_Padre == Documentos_Id.Doc_OrdenCompra)
            {
                Tabla = "dbo_Trans_OrdenCompra_Linea";
            }
            else if (Tipo_Documento_Padre == Documentos_Id.Doc_Pedido)
            {
                Tabla = "dbo_Trans_Pedido_Linea";
            }
            else if (Tipo_Documento_Padre == Documentos_Id.Doc_Recepcion)
            {
                Tabla = "dbo_Trans_Recepcion_Linea";
            }
            else if (Tipo_Documento_Padre == Documentos_Id.Doc_Remision)
            {
                Tabla = "dbo_Trans_Remision_Linea";
            }
            else if (Tipo_Documento_Padre == Documentos_Id.Doc_DevolucionCliente)
            {
                Tabla = "dbo_Trans_Devolucion_Cliente_Linea";
            }
            else if (Tipo_Documento_Padre == Documentos_Id.Doc_DevolucionProveedor)
            {
                Tabla = "dbo_Trans_Devolucion_Proveedor_Linea";
            }
            else if (Tipo_Documento_Padre == Documentos_Id.Doc_NotaCreditoCliente)
            {
                Tabla = "dbo_Trans_Nota_Credito_Cliente_Linea";
            }
            else if (Tipo_Documento_Padre == Documentos_Id.Doc_NotaCreditoProveedor)
            {
                Tabla = "dbo_Trans_Nota_Credito_Proveedor_Linea";
            }
            else if (Tipo_Documento_Padre == Documentos_Id.Doc_ReciboHonorariosVentas)
            {
                Tabla = "dbo_Trans_ReciboHonorarios_Cliente_Linea";
            }
            else if (Tipo_Documento_Padre == Documentos_Id.Doc_ReciboArrendamientoVentas)
            {
                Tabla = "dbo_Trans_ReciboArrendamiento_Cliente_Linea";

                Query = @"
                SELECT A1.*,
                       A2.Nombre AS Desc_Articulo,                       
                       'No Aplica' AS Desc_UM

                FROM 
                    (@@Tabla AS A1 
                        LEFT JOIN dbo_Cat_Inmueble  AS A2 ON A1.Id_Articulo = A2.Id_Inmueble)
                        

                WHERE Id_Padre = @@Id ORDER BY Secuencia
                ";
            }            

            Query = Query.Replace("@@Tabla", Tabla);            
            Query = Query.Replace("@@Id", Id_Documento_Padre.ToString());

            return SrvDB.ExecuteQuery_Get(Query);
        }

        #endregion
    }
}

